//package meijuli.join51.com.business.model.amap;
//
//import android.content.Context;
//import android.content.pm.PackageManager;
//import android.location.LocationManager;
//import android.os.Handler;
//import android.os.Message;
//import android.support.v4.content.ContextCompat;
//import com.amap.api.location.AMapLocation;
//import com.amap.api.location.AMapLocationClient;
//import com.amap.api.location.AMapLocationClientOption;
//import com.amap.api.location.AMapLocationListener;
//import meijuli.join51.com.business.Application;
//import meijuli.join51.com.business.StringUtil;
//import LocationDetails;
//import LogUtils;
//
///**
// * 创建时间： 2015/7/4 11:10
// * 作者：Ryan
// * 类描述：获取地理位置
// */
//public class LocationGetter implements Handler.Callback, AMapLocationListener {
//    public final String TAG = "LocationGetter";
//    //声明AMapLocationClient类对象
//    public AMapLocationClient mLocationClient = null;
//    //声明mLocationOption对象
//    public AMapLocationClientOption mLocationOption = null;
//    private Context context;
//    private Handler handler;
//    private OnLocationReceivedListener locationReceivedListener;
//    private GeocodeSearch geocoderSearch;
//    private GeocodeSearch.OnGeocodeSearchListener geocodeSearchListener;
//    /**
//     * 是否重复获取定位信息
//     */
//    private boolean mOverAgain = false;
//
//    /**
//     * @param context
//     * @param locationReceivedListener 获取位置信息监听器
//     */
//    public LocationGetter(Context context, OnLocationReceivedListener locationReceivedListener) {
//        this.context = context;
//        handler = new Handler(this);
//        this.locationReceivedListener = locationReceivedListener;
//        //初始化定位
//        mLocationClient = new AMapLocationClient(context);
//        //设置定位回调监听
//        mLocationClient.setLocationListener(this);
//        //初始化定位参数
//        mLocationOption = new AMapLocationClientOption();
//        //设置定位模式为高精度模式，Battery_Saving为低功耗模式，Device_Sensors是仅设备模式
//        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//        //设置是否返回地址信息（默认返回地址信息）
//        mLocationOption.setNeedAddress(true);
//        //设置是否只定位一次,默认为false
//        mLocationOption.setOnceLocation(false);
//        //设置是否强制刷新WIFI，默认为强制刷新
//        mLocationOption.setWifiActiveScan(true);
//        //设置是否允许模拟位置,默认为false，不允许模拟位置
//        mLocationOption.setMockEnable(false);
//        //设置定位间隔,单位毫秒,默认为2000ms
//        mLocationOption.setInterval(2000);
//        //给定位客户端对象设置定位参数
//        mLocationClient.setLocationOption(mLocationOption);
//    }
//
//    /**
//     * 当前定位是否可用
//     */
//    public static boolean isLocationAccessable() {
//        if (Application.get() == null) {
//            return false;
//        }
//        int permissionCheck = ContextCompat.checkSelfPermission(Application.get().getApplicationContext(), "android.permission.ACCESS_FINE_LOCATION");
//        if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
//            LocationManager locationManager = (LocationManager) Application.get().getSystemService(Context.LOCATION_SERVICE);
//            return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
//        }
//        return false;
//    }
//
//    /***
//     * 是否为有效纬度
//     *
//     * @param latitude 纬度
//     * @return
//     */
//    public static boolean isValidateLatitude(double latitude) {
//        return latitude <= 90 && latitude >= -90;
//    }
//
//    /***
//     * 是否为邮箱的经度
//     *
//     * @param longitude 经度
//     * @return
//     */
//    public static boolean isValidateLogitude(double longitude) {
//        return longitude <= 180 && longitude >= -180;
//    }
//
//    /**
//     * 获取定位信息，在指定的时间间隔后或者距离后重新获取地理位置信息
//     *
//     * @return
//     */
//    public AMapLocationClient getLocation() {
//        //25秒钟后仍然没有获取到地理位置时表示位置获取失败
//        handler.sendEmptyMessageDelayed(0, 30000);
//        if (null != mLocationClient) {
//            mLocationClient.startLocation();
//        }
//        return mLocationClient;
//    }
//
//    /**
//     * 获取定位信息，在指定的时间间隔后或者距离后重新获取地理位置信息
//     *
//     * @return
//     */
//    public AMapLocationClient getLocationOverAgain(long timeinterval) {
//        if (!mOverAgain) {
//            mOverAgain = true;
//            if (null != mLocationClient) {
//                //设置定位间隔,单位毫秒,默认为2000ms
//                mLocationOption.setInterval(timeinterval);
//                //给定位客户端对象设置定位参数
//                mLocationClient.setLocationOption(mLocationOption);
//                mLocationClient.startLocation();
//            }
//        }
//        LogUtils.i(TAG, "获取定位信息…………");
//        return mLocationClient;
//    }
//
//    /**
//     * 处理定位超时
//     */
//    @Override
//    public boolean handleMessage(Message message) {
//        stopLocation();
//        if (locationReceivedListener != null) {
//            LocationDetails locationDetails = new LocationDetails();
//            locationDetails.setErrorMessage("获取定位信息失败，定位超时");
//            locationReceivedListener.onLocationReceived(locationDetails, false,this, null);
//        }
//        return true;
//    }
//
//    @Override
//    public void onLocationChanged(AMapLocation aMapLocation) {//获取到了地理位置
//        try {
//            handler.removeMessages(0);
//        } catch (RuntimeException e) {
//            LogUtils.e(TAG, e);
//        }
//        LocationDetails locationDetails = new LocationDetails();
//        if (locationReceivedListener != null) {
//            if (aMapLocation == null) {
//                locationDetails = null;
//            } else {
//                int errorCode = aMapLocation.getErrorCode();
//                if (errorCode == 0) {
//                    String province = aMapLocation.getProvince();
//                    String city = aMapLocation.getCity();
//                    String district = aMapLocation.getDistrict();
//                    String street = aMapLocation.getStreet();
//                    double latitude = aMapLocation.getLatitude();
//                    double longitude = aMapLocation.getLongitude();
//                    String address = aMapLocation.getAddress();
//                    locationDetails.setProvince(province);
//                    locationDetails.setCity(city);
//                    locationDetails.setDistrict(district);
//                    locationDetails.setStreet(street);
//                    locationDetails.setLatitude(latitude);
//                    locationDetails.setLongitude(longitude);
//                    locationDetails.setErrorMessage(null);
//                    locationDetails.setAddrStr(address);
//                } else {
//                    String errorMessageTemp = aMapLocation.getErrorInfo();
//                    if (StringUtil.isEmpty(errorMessageTemp)) {
//                        errorMessageTemp = "位置信息获取失败";
//                    }
//                    locationDetails.setErrorMessage(errorMessageTemp);
//                }
//            }
//            locationReceivedListener.onLocationReceived(locationDetails, mOverAgain,this, aMapLocation);
//        } else {//未设置监听器的时候停止定位
//            stopLocation();
//        }
//    }
//
//    /**
//     * 停止定位
//     */
//    public void stopLocation() {
//        stopLocation(false);
//    }
//
//    /**
//     * 停止定位,并且清除所有的成员变量
//     */
//    public void stopLocation(boolean recycle) {
//        if (mLocationClient != null) {
//            mOverAgain = false;
//            mLocationClient.stopLocation();
//            if (recycle) {
//                mLocationClient.onDestroy();
//                mLocationClient = null;
//                mLocationOption = null;
//                geocoderSearch = null;
//                geocodeSearchListener = null;
//                locationReceivedListener = null;
//                handler = null;
//            }
//        }
//    }
//
//    /**
//     * 地理坐标转换为地址
//     *
//     * @param latLonPoint 逆地理编码的地理坐标点
//     */
//    public void geocodeToAddress(LatLonPoint latLonPoint, GeocodeSearch.OnGeocodeSearchListener geocodeSearchListener) {
//        initGeocoderSearch(geocodeSearchListener);
//        RegeocodeQuery query = new RegeocodeQuery(latLonPoint, 500, GeocodeSearch.AMAP);// 第一个参数表示一个Latlng，第二参数表示范围多少米，第三个参数表示是火系坐标系还是GPS原生坐标系
//        geocoderSearch.getFromLocationAsyn(query);// 设置同步逆地理编码请求
//    }
//
//    /**
//     * 地址转换为地理坐标
//     *
//     * @param address 查询关键字。关键字规则：多个关键字用“|”分割，“空格"表示与，"双引号" 表示不可分割。
//     * @param city    可选值：cityname（中文或中文全拼）、citycode、adcode。如传入null或空字符串则为“全国”。
//     */
//    public void addressToGeocode(String address, String city, GeocodeSearch.OnGeocodeSearchListener geocodeSearchListener) {
//        initGeocoderSearch(this.geocodeSearchListener);
//    }
//
//    private void initGeocoderSearch(GeocodeSearch.OnGeocodeSearchListener geocodeSearchListener) {
//        if (this.geocodeSearchListener != null) {
//            geocodeSearchListener = this.geocodeSearchListener;
//        } else {
//            this.geocodeSearchListener = geocodeSearchListener;
//        }
//        if (geocoderSearch == null) {
//            geocoderSearch = new GeocodeSearch(context);
//            geocoderSearch.setOnGeocodeSearchListener(geocodeSearchListener);
//        }
//    }
//
//}
